iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0

今天要來介紹 Kubernetes 中最小的運作單位 Pod。
通常一個 Pod 會代表一個 Application,常見情形也會是一個 Container,

  • Init Container
  • Basic Example
  • Multi-Container Pod
  • [Concept]

InitContainer

InitContainer 與一般 containers 相似,差別是當啟動該 Pod 時,必須先運行 initContainer,並按照 init containers 區塊中的容器順序一一啟動直到成功結束,如果過程中有任何 initContainer 無法成功完成,則 Kubernetes 會不斷重複啟動,而後才算是 Pod 完成就緒。但若設定 restartPolicy 為 Never,且在 initContainer 過程失敗,則將被視為整個 Pod failed。

上述也表明,init container 並不會與一般 container 同時並存在 Pod 上,因為它們必須在 Pod 啟動之前準備好。

Basic Example

基本建立 Pod example 如下,主要有四個關鍵區域,分別為:

  • apiVersion: 呼叫 Kubernetes API
  • kind: 所要建立的資源類型
  • metadata: 關於此物件的細節,舉凡像是該 Pod name 或是 labels 等
  • spec: 該物件規格,像是其中要 run 的 container 或是要運行的 command 等等
# Pod yaml file
apiVersion: v1
kind: Pod
metadata:
    name: podname
spec:
    containers:
    - name: nginx
      image: nginx:1.14.2
    initContainers:
    - name: init-myservice
      image: busybox
      command: ['sh', '-c', 'git clone <some-repository-that-will-be-used-by-application> ;']

基本操作語法如下:

$ kubectl create -f pod-sample.yaml
# Output only pod in default namespace
# pod/podname created

$ kubectl get pods
# Output
# NAME      READY   STATUS    RESTARTS   AGE
# podname   1/1     Running   0          17s

$ kubectl get pods -A
# Output all pods

$ kubectl describe pod
# Output more detailed about pod
# including Containers, Conditions, and Events.

Multi-Container Pod

顧名思義,即是在 Pod 中擁有多個 containers,它們共享該 Pod 的網路、volume、file system 以及整個 Pod 的 lifecycle,也就是 Pod 內的 containers 都將共生共滅。
Multi-Container Pod 有三種模式:

  • Sidecar
  • Adapter
  • Ambassador

https://ithelp.ithome.com.tw/upload/images/20230919/20163282TJ1d0W9VPm.png

圖片取自 Multi-Container Pod Design Patterns in Kubernetes, 此篇內文有三者更詳細介紹及示例。

# Multi-Containers Pod
apiVersion: v1
kind: Pod
metadata:
    name: simple-web
    labels:
        name: simple-web
spec:
    containers:
    - name: simple-web
      image: simple-web
      ports:
        - containerPort: 8080
        
    - name: log-agent
      image: log-agent

更多細節可參考 The Distributed System ToolKit: Patterns for Composite Containers


The greatest glory in living, lies not in never falling, but in rising every time we fall.
共勉之


上一篇
[Day 3.] Container Orchestration
下一篇
[Day 5.] Kubernetes client-go
系列文
Way to Golang & Kubernetes 11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言